package com.lc.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * Author:LC
 * Version:jdk-8u301
 * Date: 2022/7/18 15:48
 */
@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;


    /**
     * 思考 ribbon是怎么将 http://provider/testProvider 路径请求成功的？
     * 1. 拦截该请求；
     * 2. 获取该请求的 URL 地址:http://provider/testProvider
     * 3. 截取 URL 地址中的 provider
     * 4. 从服务列表中找到 key 为 provider 的服务实例的集合(服务发现)
     * 5. 根据负载均衡算法选出一个符合的实例
     * 6. 拿到该实例的 host 和 port，重构原来 URL 中的 provider
     */
    @GetMapping("/testRibbon")
    public String testConsumer(String serviceName) {
        String url = "http://" + serviceName + "/testProvider";
        return restTemplate.getForObject(url, String.class);
    }


    @GetMapping("/testClient")
    public String testClient(String serviceName){
        ServiceInstance choose = loadBalancerClient.choose(serviceName);
        //LoadBalancerClient.choose(serviceName)可以通过服务名拿到服务实例
        System.out.println(choose.getHost() + " " + choose.getPort());
        return choose.toString();
    }
}
